#include "tcpsocket.h"
#include "debug.h"
#include "file_transfer.h"
#include "unistd.h"
#include "pthread.h"

void * do_task(void *arg) {
    // 线程函数里面处理服务端连接
    // 先将传递的cfd 套接字 标识符获取转换
    size_t size;

    int cfd = *(int *) arg;
    size = client_upload_file(cfd); // 该函数会不断获取数据， 先接受文件头再接收数据

    printf("client uplaod file size : %ld \n", size);
    pthread_exit(NULL);
}

int main(int argc, char const *argv[])
{
    int sfd, cfd;
    int ret;
    struct sockaddr_in cli_addr;
    pthread_t tid;
    // 创建服务端套接字
    sfd = create_tcp_server_socket(argv[1], argv[2]);

    for(;;) {
        bzero(&cli_addr, sizeof(cli_addr));
        cfd = wait_for_connect(sfd, &cli_addr);
        if (cfd == -1) {
            exit(EXIT_FAILURE);
        }
        // 打印连接到的客户端地址信息
        show_tcp_network_address(&cli_addr);

        // 创建线程用户客户端和服务器链接 
        ret = pthread_create(&tid, NULL, do_task, (void *) &cfd);
        if (ret != 0) {
            DEBUF_INFO("[error] pthread_create(): %s \n", strerror(errno));
            exit(EXIT_FAILURE);
        }
        pthread_detach(tid); // 用户释放线程资源
    }
    close(sfd);
    close(cfd);

    return 0;
}

